package io.gitee.epoll.demo.executor;

import java.util.List;

/**
 * 模拟多路复用器过程
 * 
 * 此处做了四件事情。
 * 第一件:创建一个 二叉树.<br/>
 * 第二件:把channel 放到二叉树上。<br/>
 * 第三件：把状态为ready的io从二叉树上找到并且复制标识到链表中
 * 第四件：获取ready io集的链表
 */
public class BWSelector {

  /**
   * 模拟selector 执行accpet
   * 
   * @return
   */
  public static List<Object> doAccept() {
    // TODO 这里得到 channel
    while (true) {
      accept();
    }
  }

  private static void accept() {
  }

  // 开辟堆空间 。用于存储 已经accept 的fd相关
  public static void epoll_create() {
    // 开辟堆空间 。用于存储 已经accept 的fd相关
    // TODO
  }

  /**
   * 讲channel 相关存储二叉树中
   */
  public static void epoll_ctl() {
    // fd增删改 操作二叉树
    BwNode.create();
    BwNode.pop();
    BwNode.speek();
  }

  /**
   * 获取ready io 取的是 链表
   */
  public static List<Object> epoll_wait(long waitTime) {
    // TODO
    return null;
  }

  /**
   * 存储 df
   */
  public static class BwNode {
    private Object value;
    private BwNode left;
    private BwNode right;

    public static void create() {
      // TODO
      // 第一步 添加fd 到 二叉树
      // 注册回调函数 到内核 用yu
    };

    public static void pop() {
      // TODO
    };

    public static void speek() {
      // TODO
    };
  }

}